// 1. 两数之和
// 时间复杂度为 O(n^2)
// 空间复杂度为O(1) 只用到常数个临时变量

// 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
var twoSum = function (nums, target) {
  for (let i = 0; i < nums.length - 1; i++) {
    for (let j = 0; j < nums.length; j++) {
      if (i !== j) {
        if (nums[i] + nums[j] == target) {
          return [i, j]
        }
      }
    }
  }
}

// 方法2 利用map 查找元素
// 时间复杂度：O(N)，其中,N 是数组中的元素数量。对于每一个元素 x，我们可以 O(1) 地寻找 target - x。
// 空间复杂度：O(N)，其中N 是数组中的元素数量。主要为哈希表的开销。

// map目的用来存放我们访问过的元素，因为遍历数组的时候，需要记录我们之前遍历过哪些元素和对应的下表，这样才能找到与当前元素相匹配的（也就是相加等于target）
// var twoSum = function (nums, target) {
//   let hash = {}
//   for (let i = 0; i < nums.length; i++) {
//     let item = nums[i]
//     let hashItem = hash[target - item]
//     if (hashItem !== undefined) {
//       return [hashItem,i]
//     }
//     hash[item] = i
//   }
// }

var nums = [2, 7, 11, 15]

console.log(twoSum(nums, 9))
